/**********************************************************

     文件名称: suo_mgr.h

     项目功能: 

     作者: 佳奇

     邮箱: 1374804492@qq.com 

     创建时间: Wed 24 Aug 2022 07:04:50 PM CST

**********************************************************/


#ifndef _SUO_MGR_H_
#define _SUO_MGR_H_


#include <time.h>


extern struct tm* pt;


//	密码结构体
typedef struct
{
	int user_id;						//	工号
	char user_name[31];					//	用户名
	char user_pwd[33];					//	密码
	int state;							//	状态
	int idenditr;						//	身份
}cry;


//	收银员结构体
typedef struct
{
	int user;							//	工号
	char pwd[33];						//	密码
	char id[19];						//	身份证号
	char name[31];						//	姓名
	char sex;							//	性别
	char phone[12];						//	电话
	char add[91];						//	住址
	int state;							//	状态判断(0 为首次登录 1 为多次登录)
	int idendity;						//	身份判断(0 为管理员身份 1 为收银员身份)
}cas;


//	商品信息结构体
typedef struct
{
	int barcode;						//	条码
	char com_name[31];					//	商品名称
	int unit;							//	单价
	char manu[61];						//	厂家	
	int num;							//	数量
	int allow;							//	余量
}com;


//	销售记录结构体
typedef struct
{
	char name[31];						//	收银员用户名
	int id;								//	收银员工号
	int bar;							//	条码
	time_t sell_time;					//	卖出时间
	int total;							//	总价
	char note[151];						//	备注
}sales;


//	收银员单链表
typedef struct cashier
{
	cas* data;							//	数据域
	struct cashier* next;				//	指针域（后继节点）
}cas_list;


//	商品信息单链表
typedef struct commodity
{
	com* data;							//	数据域
	struct commodity* next;				//	指针域（后继节点）
}com_list;


//	销售记录单链表
typedef struct sales_record
{
	sales* data;						//	数据域
	struct sales_record* next;			//	指针域（后继节点）
}sales_list;


//	密码链表
typedef struct crypodg
{
	cry* data;							//	数据域
	struct crypodg* next;				//	指针域
}admin;

//	声明四个全局链表
extern cas_list* s1;
extern com_list* s2;
extern sales_list* s3;
extern admin* s4;

// 收银员信息相关函数
void c_buffer(void);												//	清空标准输入缓冲区
void input_cas(cas_list*, admin*);									//	录入收银员信息
void del_cas(cas_list*);											//	删除收银员信息
void quier_cas(cas_list*);											//	查询收银员信息(可支持模糊查询)
int deter(cas_list*, int);											//	通过工号查询员工是否存在
void mv_cas(cas_list*);												//	修改员工信息
void quier_sales(sales_list* );										//	查询所有收银员的销售记录
void cas_total(sales_list*);										//	按收银员姓名统计销售总额
void q_cas(cas_list*, int);											//	收银员个人信息
void q_s_e(sales_list*, int);										//	收银员个人销售额
void q_s_j(sales_list*, int);										//	收银员个人销售记录

void mv_pwd(admin* demo, int);										//	修改密码
void admin_function(const char*);									//	管理员用户登录功能
void cas_function(const char*, const int);							//	收银员用户登录操作功能
admin* user_login(void);											//	用户登录函数 密码匹配登录成功返回密码节点指针 否则返回NULL
cas_list* create_cas(void);											//	创建收银员链表头
com_list* create_com(void);											//	创建商品信息链表头
sales_list* create_sales(void);										//	创建销售记录链表头
admin* create_admin(void);											//	创建密码链表头
void get_time(void);												//	时间函数
int geshipanduan(int);												//	判断 scanf 输入格式是否有误 成功读取返回 1 失败返回 0
void read_infor(cas_list*, com_list*, sales_list*, admin*);			//	程序启动时 将所有数据从文件加载至链表
void write_infor(cas_list*, com_list*, sales_list*, admin*);		//	程序结束时 将链表中所有数据覆盖写入至文件中
admin* input_pwd(const char*, const char*, int, int, int);			//	生成新的密码节点 并返回该节点指针
void input(admin*, admin*);											//	将密码节点插入至链表中

//	商品信息相关函数
com_list* q_com(com_list*, int);									//	查询商品信息 找到返回改商品节点指针 未找到返回 NULL
void input_com(com_list*);											//	添加商品信息
void del_com(com_list*);											//	删除商品信息
void mv_com(com_list*);												//	修改商品信息
void quier_com(com_list*);											//	查询商品信息(可支持模糊查询)
void com_inven(com_list*);											//	盘点商品库存信息
void trading(sales_list*, com_list*, const char*, const int);		//	模拟交易功能


#endif
